/**
 *
 * @author Oscar
 * Bean que implementa las interfaces Remote y Local para el modulo de proyectos
 */

package proyectos.capalogica;

import capadatos.ModuloProyectosCapaDatos;
import sistemaamd.ServiceResult;
import sistemaamd.Proyecto;

import java.util.ArrayList;
import javax.ejb.Stateless;

@Stateless
public class ModuloProyectosBean implements ModuloProyectosRemote, ModuloProyectosLocal
{
    //Instancia del modulo de proyecto de capa 3
    ModuloProyectosCapaDatos moduloProyectosCapaDatos;

    //Consulta para obtener un proyecto en particular de la base de Datos
    @Override
    public ServiceResult ObtenerProyecto(int idProyecto) {
        ServiceResult resultado=null;

        //se crea una instancia de la clase de capa 3
        this.moduloProyectosCapaDatos = new ModuloProyectosCapaDatos();

        //si hubo error en la creación de la instancia de capa 3
        if(this.moduloProyectosCapaDatos.getExisteError())
            //retorna con el mensaje de error
            return new ServiceResult(this.moduloProyectosCapaDatos.getMensajeError());
        
        resultado = this.moduloProyectosCapaDatos.cargarProyecto(idProyecto);

        //si no hubo errores
        if(!resultado.getExisteError().booleanValue()) {
            //se crea una lista de objetos Cliente
            ArrayList<Proyecto> lista = new ArrayList<Proyecto>();
            //se obtiene el valor del resultado de capa 3
            ArrayList valorResultado = resultado.getValorResultado();
            
            Proyecto proy = (Proyecto)valorResultado.get(0);
            lista.add(proy);
                
            //se crea una nueva variable de resultado
            resultado = new ServiceResult();
            //y se establece el valor como la lista de Clientes
            resultado.setValorResultado(lista);
        }

        return resultado;
        
    }

    //Consulta para obtener los proyectos de la Base de Datos
    @Override
    public ServiceResult ObtenerProyectos()
    {
        ServiceResult resultado=null;

        //se crea una instancia de la clase de capa 3
        this.moduloProyectosCapaDatos = new ModuloProyectosCapaDatos();

        //si hubo error en la creación de la instancia de capa 3
        if(this.moduloProyectosCapaDatos.getExisteError())
            //retorna con el mensaje de error
            return new ServiceResult(this.moduloProyectosCapaDatos.getMensajeError());
        
        resultado = this.moduloProyectosCapaDatos.cargarProyectos();

        //si no hubo errores
        if(!resultado.getExisteError().booleanValue()) {
            //se crea una lista de objetos Cliente
            ArrayList<Proyecto> lista = new ArrayList<Proyecto>();
            //se obtiene el valor del resultado de capa 3
            ArrayList valorResultado = resultado.getValorResultado();

            for(int i = 0; i < valorResultado.size(); i++) {
                Proyecto proy = (Proyecto)valorResultado.get(i);
                lista.add(proy);
            }
            //se crea una nueva variable de resultado
            resultado = new ServiceResult();
            //y se establece el valor como la lista de Clientes
            resultado.setValorResultado(lista);
        }

        return resultado;
    }

    //Consulta para obtener los proyectos asignados a un RProy
    @Override
    public ServiceResult ObtenerProyectosRProy(int idUsuario)
    {
        ServiceResult resultado=null;

        //se crea una instancia de la clase de capa 3
        this.moduloProyectosCapaDatos = new ModuloProyectosCapaDatos();

        //si hubo error en la creación de la instancia de capa 3
        if(this.moduloProyectosCapaDatos.getExisteError())
            //retorna con el mensaje de error
            return new ServiceResult(this.moduloProyectosCapaDatos.getMensajeError());

        resultado = this.moduloProyectosCapaDatos.obtenerProyectosRProy(idUsuario);

        //si no hubo errores
        if(!resultado.getExisteError().booleanValue()) {
            //se crea una lista de objetos Cliente
            ArrayList<Proyecto> lista = new ArrayList<Proyecto>();
            //se obtiene el valor del resultado de capa 3
            ArrayList valorResultado = resultado.getValorResultado();

            for(int i = 0; i < valorResultado.size(); i++) {
                Proyecto proy = (Proyecto)valorResultado.get(i);
                lista.add(proy);
            }
            //se crea una nueva variable de resultado
            resultado = new ServiceResult();
            //y se establece el valor como la lista de Clientes
            resultado.setValorResultado(lista);
        }

        return resultado;
    }

    /**
     * Método de negocio que obtiene los oficiales de proyecto
     * @return ServiceResult con el resultado de la operación
     */
    @Override
    public ServiceResult ObtenerOficialesDeProyecto(String idUsuario)
    {
        ServiceResult resultado=null;
        //se crea una instancia de la clase de capa 3
        this.moduloProyectosCapaDatos = new ModuloProyectosCapaDatos();

        //si hubo error en la creación de la instancia de capa 3
        if(this.moduloProyectosCapaDatos.getExisteError())
            //retorna con el mensaje de error
            return new ServiceResult(this.moduloProyectosCapaDatos.getMensajeError());

        //si no hubo errores
        if(!resultado.getExisteError().booleanValue())
        {
            //se crea una lista de objetos Usuario - Oficiales d Proyecto
            ArrayList<String> lista = new ArrayList<String>();

            //se obtiene el valor del resultado de capa 3
            ArrayList valorResultado = resultado.getValorResultado();

            //se obtiene la cantidad de registros que fueron consultados
            String nombre = valorResultado.get(0).toString();
            lista.add(nombre);

            //se crea una nueva variable de resultado
            resultado = new ServiceResult();
            
            //y se establece el valor como la lista de Usuarios - Oficiales de Proyecto
            resultado.setValorResultado(lista);
        }

        return resultado;
    }

    //Consulta para asignar un oficial a un proyecto
    public ServiceResult AsignarOficialDeProyecto(String proyecto, String oficial)
    {
        ServiceResult resultado=null;
        //se crea una instancia de la clase de capa 3
        this.moduloProyectosCapaDatos = new ModuloProyectosCapaDatos();

        //si hubo error en la creación de la instancia de capa 3
        if(this.moduloProyectosCapaDatos.getExisteError())
            //retorna con el mensaje de error
            return new ServiceResult(this.moduloProyectosCapaDatos.getMensajeError());

        //si no hubo errores
        if(!resultado.getExisteError().booleanValue())
        {
        /*
            //se crea una lista de objetos Cliente
            ArrayList<String> lista = new ArrayList<String>();

            //se obtiene el valor del resultado de capa 3
            ArrayList valorResultado = resultado.getValorResultado();

            //se obtiene la cantidad de registros que fueron consultados
            String nombre = valorResultado.get(0).toString();
            lista.add(nombre);

            //se crea una nueva variable de resultado
            resultado = new ServiceResult();

            //y se establece el valor como la lista de Clientes
            resultado.setValorResultado(lista);*/
        }

        return resultado;
    }

    //Consulta para evaluar un proyecto
    public ServiceResult EvaluarProyecto(String proyecto, String resultadoDeEvaluacion)
    {
        ServiceResult resultado=null;
        //se crea una instancia de la clase de capa 3
        this.moduloProyectosCapaDatos = new ModuloProyectosCapaDatos();

        //si hubo error en la creación de la instancia de capa 3
        if(this.moduloProyectosCapaDatos.getExisteError())
            //retorna con el mensaje de error
            return new ServiceResult(this.moduloProyectosCapaDatos.getMensajeError());

        //se consultan los clientes en capa 3
        //resultado = this.moduloProyectosCapaDatos.autenticarUsuario(correo, clave);

        //si no hubo errores
        if(!resultado.getExisteError().booleanValue())
        {
            //se crea una lista de objetos Cliente
            ArrayList<String> lista = new ArrayList<String>();

            //se obtiene el valor del resultado de capa 3
            ArrayList valorResultado = resultado.getValorResultado();

            //se obtiene la cantidad de registros que fueron consultados
            String nombre = valorResultado.get(0).toString();
            lista.add(nombre);

            //se crea una nueva variable de resultado
            resultado = new ServiceResult();

            //y se establece el valor como la lista de Clientes
            resultado.setValorResultado(lista);
        }

        return resultado;
    }

    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method" or "Web Service > Add Operation")
}
